我同時開兩個 Claude app(代稱:工地):一個手機版 Claude chat,拿來速記、腦力激盪;一個桌機版 Cowork,跑比較重的工程。某天我冒出一個念頭——人不在電腦前的時候,能不能先把活「預掛」在工地門口,等我到了再開工?
聽起來像在描述「遠端自動派工」。但我要的其實是它的相反。
自動派工是:你丟一句話,代理就在你不在的時候自己把事做完。很多人要的正是這個——丟了就走、回來收成品。
我要的恰恰相反。我要的是留一張單在門口,什麼都先別動,一直到我人到現場、親自放行,它才開工。執行這一步,我要鎖在「人到場」上。理由很簡單:手不離方向盤。我不想要一個我不在時會替我做決定的東西,我想要一個我不在時也能先把明天的活寫在門口、但絕不擅自上樓的東西。
我把這個概念叫「門口掛單」。
我最初的想法很天真:在對話視窗裡請 AI「幫我把這張單掛給 Cowork 那邊」。
試了,失敗。原因不是手法不對,是那條管線根本不存在。對話視窗和 Cowork 是兩個分開的實例,各讀各的記憶層。對話這端沒有你機器的檔案系統權限,伸不進 Cowork 的工地;而 Cowork 開工時讀的是它自己工地裡的檔案。AI 對 AI 那根管子是空的——沒有任何一隻能把單子直接遞到另一隻手上。
結論有點反直覺但很重要:這條路上的郵差只能是你自己。 門口掛單會成立的版本,不是「A 代理交給 B 代理」,是「你產出一張貼上去就能用的單,自己帶過去,另一端有一條進場必讀的規矩把它撿起來」。靠的是格式紀律加進場流程,不是跨實例的魔法。
能把單子從手機帶到桌面的工具是現成的——Anthropic 的 Dispatch(在 Cowork 裡):手機配對桌面 app,你從手機丟任務,由你電腦本機執行。
但這裡有個關鍵落差。Dispatch 的官方故事是「丟了就走、回來收成品」——它天生是設計來無人值守地把事做完的。而我要的是「掛著別動、等我到場」。兩者剛好逆向。
所以我沒辦法直接用它,我得在上面加一層閘。
我把放行設計成兩層。
第一層(軟):HOLD 標頭。 每張掛單最前面先放一段「先別動工、只回收到、覆述你的計畫、停住等我」。它擋的是代理「愛動手」的本性——收到單不翻、直接上樓的那種衝動。但這層只是降低機率,不是真鎖。
第二層(硬):權限留空。 真正的鎖是——掛單時,執行所需的檔案/工具授權先不給。Cowork 在動作前會跳權限提示問你;你不在、不點,它就動不了。這道提示框才是我的 dead-man's-switch。
放行只認一個固定通關語,一字不差,其他說法(「ok」「看起來對」「開始吧」)一律維持 HOLD。
掛單模板長這樣(手機端貼):
【掛單 · HOLD】
⛔ 先別動工。這是預掛工單,不是開工令。
你現在只做三件事:
1. 回我「收到」
2. 覆述:你打算怎麼做、會碰哪些檔/表
3. 停住等我。沒看到通關語之前,不准執行、不准改任何檔。
—— 工單 ——
標題:__________
要做什麼:__________
來源:__________
範圍(可選):__________
驗收長相(可選):__________
卡住時:停下、記下來、別猜
放行通關語:helloworld
只認這串、一字不差。其他說法一律維持 HOLD。
現場放行三步:看單 → 補權限 → 說通關語。順序別顛倒——先開鎖、再放行;反過來它會想動卻動不了,卡在那空轉。
第一次測,我刻意不拿真活,用一個無害的唯讀任務當載具——「查今天台北天氣」。要的不是天氣,是驗證整條鏈。
結果跑通了:
兩層閘都不是紙上設計,是實測會擋。
跑通之外,這場測試順手掀出三個官方說法沒提、但你實作時一定會撞到的邊界。這部分才是我想留下的。
我送了兩張 HOLD 著的單,只喊了一次通關語——兩張都開工了。
固定通關語的代價在這裡:它省了拼字,卻分不出要放哪一張。喊一聲,當下所有 HOLD 著的單會一起放行。對無害的活無所謂;但哪天你有好幾張真單同時掛著、只想放一張,這就是個坑。
實務規則:要分開放行的單,就別同時掛著——一張一張送、送一張放一張。
本節為官方文件的解讀,我沒有親自實測過——與第一節的實測觀察請分開看待。
我原本以為「權限留空=它卡在門口等我幾小時」。實際不是。
依官方文件,當任務需要某項權限時提示會轉發給你;你十分鐘內不回應,該請求會自動被拒,然後任務跳過那個動作繼續往下跑。
自動拒是往安全那邊倒(動作沒做),這點好。但「任務繼續」代表它會把不需要權限的部分做掉,不是完全靜止。所以「權限留空」這層硬鎖,只在「它本來就不該動」時最可靠;一旦它誤判成該開工,硬層只擋得掉特權動作、擋不住它繼續摸別的。對「擱幾小時等我到場」的長等場景,這個十分鐘窗口要先知道。
Dispatch 要能接單,前提是電腦醒著、app 開著、而且連得上。它有個 Keep Awake 開關,很容易讓人以為「開了就高枕無憂」。
但合蓋睡眠和 Keep Awake 擋的睡眠是兩種不同的睡眠。Keep Awake(等同 caffeinate 那類)擋的是閒置逾時睡眠;而合蓋是另一種韌體層級的 clamshell 睡眠,app 等級的 keep-awake 預設蓋不掉。筆電電池供電、沒接外接螢幕時,一合蓋就照睡——不管 Keep Awake 開不開。(「為什麼 Keep Awake 擋不住合蓋睡眠」這個機制解釋,是官方文件與 macOS 一般行為;但下面「合蓋後掛不了單」的結果是我實測的。)
實測——桌面不可達時會怎樣(兩個情境都驗了):
第二個情境是關鍵:它證明 Dispatch 要的不是「機器有沒有網路」,是「桌面 app 醒著且連得上」。那句錯誤訊息其實兩個條件都點了——「online and desktop app is open」——合蓋睡著時補上網路只滿足前半,後半(app 醒著)才是綁死的那個。睡著的不是網路,是 app。
所以「排隊還是失敗」這題,答案是失敗、而且 fail-closed:搆不到就鎖住送出,工單根本掛不上去。
這其實是好事——fail-closed 比「默默排隊、之後不知不覺跑掉」安全。但它也釘死一件事:Dispatch 沒辦法在你機器睡著/離線時預掛,送單當下桌面必須醒著且連得上。所以「闔上筆電就走、人到再開工」這種劇本,Dispatch 撐不住——這也是為什麼真要「掛著等我」,該用「留一張單+現場開新工地」,而不是硬塞給 Dispatch。
要合蓋也保證醒著,得用更硬的手段(pmset disablesleep、選單列工具、或外接電源+螢幕走正規 clamshell),而且要顧散熱與耗電。如果遠端接單要常態化,一台沒有蓋子、生來常時運轉的桌機(例如 Mac mini),其實比筆電合適得多。
把這場實作收斂成一句判斷:
| 情境 | 用 Dispatch? | 為什麼 |
|---|---|---|
| 短、邊界清楚、可無人值守做完的輕活 | 用 | Dispatch 就是為「丟了就做完、回來收成品」設計的 |
| 純 HOLD(叫它什麼都別做、只覆述、等我) | 可用 | 沒有要執行的動作,不會跳權限、不會 timeout,會停著等你 |
| 重活、要擱幾小時等現場 | 別用 | Dispatch 是「無人值守做完」,不是「冰著等你」;十分鐘自動拒+繼續,剛好逆向。改用:留一張單、到現場開乾淨的新工地撿單 |
Dispatch = 丟了就做完的短活;「掛著等我」=留單+現場新場。兩者是相反的工具,別硬把後者塞進前者。
我不是資安專家,也不是 AI 應用專家。這篇不是教學,是一個把工具反過來用之後的觀察記錄——官方故事說它是全自動,我偏要它停在門口等我,然後在「說法」和「機制」的落差裡,撞到三個邊界。
如果你也想給代理加一道「人到場才開工」的閘,希望這三個坑能讓你少踩。